﻿package  birdry.utils	{
	
	import flash.events.EventDispatcher;
	
	
	public class EventUtil	{
		
		/**
		* addEventListener(	MouseEvent.CLICK, EventUtil.sendParam(clickHdl, num, str)	);
		* @param	func
		* @param	...arg
		* @return
		*/
		public static function sendParam(func:Function, ...arg):Function{
            return function(...innerArgs):void{
                func.apply(this, innerArgs.concat(arg));
            }
        }
		
		/**
		 * 일회용 이벤트 리스너를 등록합니다. <br>
		 * 이벤트가 1회 발생 되면 자동으로 removeEventListener()가 수행 됩니다.
		 * @param type - Event Type
		 * @param target - 이벤트가 발생될 대상
		 * @param listener - 이벤트 발생시 수행될 메소드
		 * @param useEventParam - [listener]에서 [Event] 타입의 파라메터를 받을 경우 true
		 */
		public function setDisposableHandler(type : String, target : EventDispatcher, listener : Function, useEventParam : Boolean = true) : void
		{
			target.addEventListener(type,		
			function (event : Event) : void 
			{
				var dispatcher : EventDispatcher = event.target as EventDispatcher;
				dispatcher.removeEventListener(event.type, arguments["callee"]);
				if (listener != null)
				{
					if (useEventParam) listener(event);
					else listener();
				}
			});
		} 
	}
}

